package com.boot.ys.mybatisplus.Test;

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * @author: 杨升
 * @date: 2025-06-13 22:57
 * @Version 1.0
 */

public class AboXmlFiled {

    /**
     * 更新xml文件内容
     *
     * @param Path         项目根目录
     * @param oldClassName 拼音表名/拼音字段    jiudianxinxi
     * @param newClassName 表英文表名/英文字段    hotel_info/hotelInfo
     * @Param type 1：更新表字段 2：更新resultMap返回值
     * @Date: 2025/4/10
     */
    static void updateXmlContent(String Path, String oldClassName, String newClassName, Integer type) throws IOException {

        java.nio.file.Path startPath = Paths.get(Path);

        // 包含的文件扩展名
        Set<String> set = new HashSet<>();
        set.add("xml");


        Map<String, String> map = new HashMap<>();

        if (type == 1) {
            // 更新表字段
            // column="gongsimingcheng" ==》column="corporate_name"
            map.put("column=\"" + oldClassName + "\"", "column=\"" + newClassName + "\"");
        } else if (type == 2) {
            // 更新sql语句里面的ResultMap返回值
            // resultType="com.entity.vo.CorporateNameVO" ==》resultMap="wuliugongsiMap"
            map.put("resultType=\"com.entity.vo." + newClassName + "VO\"", "resultMap=\"" + oldClassName + "Map\"");
            map.put("resultType=\"com.entity.view." + newClassName + "View\"", "resultMap=\"" + oldClassName + "Map\"");
        }


        Files.walkFileTree(startPath, new SimpleFileVisitor<java.nio.file.Path>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                // 获取文件名
                String fileName = file.getFileName().toString();

                // 检查文件是否有扩展名（即是否包含点号）
                int dotIndex = fileName.lastIndexOf('.');
                if (dotIndex > 0) {  // 确保点号不在开头位置
                    // 提取扩展名（去掉点号，并转为小写）
                    String fileExtension = fileName.substring(dotIndex + 1).toLowerCase();

                    // 检查扩展名是否在允许的集合中
                    if (set.contains(fileExtension)) {
                        // 只有符合条件的文件才会被处理
                        processFileContent(file, map);
                    }
                }
                return FileVisitResult.CONTINUE;
            }
        });

        System.out.println("更新Xml内容成功!");
    }

    static void processFileContent(Path file, Map<String, String> map) throws IOException {
        String content = new String(Files.readAllBytes(file), "UTF-8");


        String result = content;
        for (Map.Entry<String, String> entry : map.entrySet()) {
            result = result.replaceAll(entry.getKey(), entry.getValue());
        }

        if (!result.equals(content)) {
            System.out.println("Updating content of: " + file);
            Files.write(file, result.getBytes("UTF-8"), StandardOpenOption.TRUNCATE_EXISTING);
        }
    }

}
